#include <bits/stdc++.h>
using namespace std;
constexpr int N = 1e3+5;
constexpr long long MOD = 1e9 + 7;
int t, n, k, dp[N][N][55];
long long nfac[N], rfac[N];
long long pw(long long n, long long k){
if(k == 0) return 1;
if(k == 1) return n % MOD;
else if(k % 2 == 1){
long long x = pw(n, k/2);
return (x * x % MOD) * n % MOD;
}
else{
long long x = pw(n, k/2);
return (x * x % MOD);
}
}
long long cnr(long long n, long long r){
return (nfac[n] * rfac[r] % MOD) * rfac[n-r] % MOD;
}
int main(){
ios::sync_with_stdio(false), cin.tie(nullptr);
nfac[0] = 1; rfac[0] = 1;
for(int i = 1; i < N; i++){
nfac[i] = nfac[i-1] * i % MOD;
rfac[i] = pw(nfac[i], MOD-2);
}
dp[0][0][0] = 1;
for (int i = 0; i < N; i++){
for (int j = 1; j < N; j++){
for (int k = 0; k < 55; k++){
dp[i][j][k] = dp[i][j-1][k];
if (i >= j && k > 0)
dp[i][j][k] = (dp[i][j][k] + dp[i - j][j - 1][k - 1]) % MOD;
}
}
}
cin >> t;
while (t--) {
long long ans = 0;
cin >> n >> k;
if (k > 50)
cout << 0 << '\n';
else {
for (int i = 1; i <= n; i++){
ans = (ans + (1LL * dp[i][n][k] * cnr(n - i + k, k) % MOD)) % MOD;
}
cout << ans * nfac[k] % MOD << '\n';
}
}
return 0;
}
628. Maximum Product of Three Numbers | 1526A - Mean Inequality |
1526B - I Hate 1111 | 1881. Maximum Value after Insertion |
237. Delete Node in a Linked List | 27. Remove Element |
39. Combination Sum | 378. Kth Smallest Element in a Sorted Matrix |
162. Find Peak Element | 1529A - Eshag Loves Big Arrays |
19. Remove Nth Node From End of List | 925. Long Pressed Name |
1051. Height Checker | 695. Max Area of Island |
402. Remove K Digits | 97. Interleaving String |
543. Diameter of Binary Tree | 124. Binary Tree Maximum Path Sum |
1465. Maximum Area of a Piece of Cake After Horizontal and Vertical Cuts | 501A - Contest |
160A- Twins | 752. Open the Lock |
1535A - Fair Playoff | 1538F - Interesting Function |
1920. Build Array from Permutation | 494. Target Sum |
797. All Paths From Source to Target | 1547B - Alphabetical Strings |
1550A - Find The Array | 118B - Present from Lena |